With the initial development and rapid maturation of electronic communications systems, including both communications media and systems incorporated internally within computer systems as well as communications media and systems that interconnect discrete computer systems, a wide variety of distributed application-level and systems software have been developed to allow concurrent and simultaneous, parallel execution of processes distributed spatially and in time within computer systems and among interconnected processors and interconnected computer systems. In addition, interconnected processing entities, such as hardware systems controlled by logic circuits, firmware, or a combination of logic circuits and firmware, may also run in parallel, in a cooperative fashion.
In distributed systems, multiple processes and/or processing entities may share various device and computing resources accessible via a communications system, such as a computer network. In order for distributed systems to properly function, concurrent and simultaneous contention by multiple processes and/or processing entities for devices and computing resources needs to be controlled, in order to prevent uncontrolled, concurrent or simultaneous access of devices and computing resources that lead to timing dependencies and non-deterministic behavior. Such timing dependencies can lead to many different pathologies, including data corruption, process crashes, system deadlock, and process starvation. Many different techniques for facilitating distributed resource sharing by intercommunicating processes have been developed. However, currently available techniques have timing dependencies on communications message transmission and reception, and are therefore vulnerable to the vagaries of communications transmission delays, process instability, and other problems that arise in real-world distributed system. Moreover, many of the distributed-resource-sharing protocols involve message exchange inefficiencies, requiring significant message traffic to coordinate shared access to device and computing resources. Manufacturers, vendors, designers, and users of distributed systems therefore continue to seek reliable, robust, and efficient distributed-resource-sharing methods.